import java.util.ArrayList;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Controller {

    // 用户登录账号检查
    public boolean logInAccountCheck(String account, String pwd) {
        switch (Main.userFlag) {
            case 0: // 学生
                if (Main.userAccountArray.studentAccountArrayCheck(account, pwd) == 0) {
                    return true;
                } else {
                    return false;
                }
            case 1: // 教师
                if (Main.userAccountArray.teacherAccountArrayCheck(account, pwd) == 0) {
                    return true;
                } else {
                    return false;
                }
            case 2: // 管理员
                if (Main.userAccountArray.managerAccountArrayCheck(account, pwd) == 0) {
                    return true;
                } else {
                    return false;
                }
            default:
                break;
        }
        return false;
    }
    //用正则表达式结合法则来判定注册账号有效性
    private static boolean isValidAccount(String account,String regex) {
        // 定义正则表达式规则
//        String regex = "1111[1-4][2-5][6-9][5-8][3-6][4-7][5-8][2-5][1-3]";

        // 编译正则表达式
        Pattern pattern = Pattern.compile(regex);

        // 创建 Matcher 对象
        Matcher matcher = pattern.matcher(account);

        // 进行匹配和判断
        return matcher.matches();
    }

    // 用户注册账号检查
    public boolean signUpAccountCheck(String account, String pwd) {
        switch (Main.userFlag) {
            case 0: // 学生
                //法则："1111[1-4][2-5][6-9][5-8][3-6][4-7][5-8][2-5][1-3]"
                if(!isValidAccount(account,"1111[1-4][2-5][6-9][5-8][3-6][4-7][5-8][2-5][1-3]"))
                {
                    System.out.println("你的学号无效");
                    return true;
                }
                if (Main.userAccountArray.studentAccountArrayCheck(account, pwd) == 0) {
                    System.out.println("用户已存在");
                    return true;
                } else {
                    Main.userAccountArray.studentAccountArrayAdd(account, pwd);

                    return false;
                }
            case 1: // 教师
                //法则："2222[1-4][2-5][6-9][5-8][3-6][4-7][5-8][2-5][1-3]"
                if(!isValidAccount(account,"2222[1-4][2-5][6-9][5-8][3-6][4-7][5-8][2-5][1-3]"))
                {
                    System.out.println("你的教师编号无效");
                    return true;
                }
                if (Main.userAccountArray.teacherAccountArrayCheck(account, pwd) == 0) {
                    System.out.println("用户已存在");
                    return true;
                } else {
                    Main.userAccountArray.teacherAccountArrayAdd(account, pwd);
                    return false;
                }
            case 2: // 管理员
                //法则："3333[1-4][2-5][6-9][5-8][3-6][4-7][5-8][2-5][1-3]"
                if(!isValidAccount(account,"3333[1-4][2-5][6-9][5-8][3-6][4-7][5-8][2-5][1-3]"))
                {
                    System.out.println("你的管理员编号无效");
                    return true;
                }
                if (Main.userAccountArray.managerAccountArrayCheck(account, pwd) == 0) {
                    System.out.println("用户已存在");
                    return true;
                } else {
                    Main.userAccountArray.managerAccountArrayAdd(account, pwd);
                    return false;
                }
            default:
                break;
        }
        return false;
    }

    // 个人信息查询,参数为id,返回值是person类
    public Person personalInformationQuery(String ID) {

        switch (Main.userFlag) {
            case 0: // 学生
//                Student student = new Student();
//                student.informationQuery(Login.currentAccount, Login.currentPwd);
                return Main.userInfArray.studentInformationQuery(ID);
            case 1: // 教师
                Teacher teacher = new Teacher();
                return Main.userInfArray.teacherInformationQuery(ID);
            default:

                break;
        }
        return null;
    }

    // 数据录入请求
    public boolean dataEntry() {
        // 数据添加请求，针对管理员端
        if (Main.userFlag == 2) {
            return true;
        } else {
            return false;
        }
    }

    //获得课程数据表
    public void getCourseArray()
    {
        Main.courseInfArray.courseDataSheetGet(true);
    }
    public void getGradeArray()
    {
        Main.gradeInfArray.gradeDataSheetGet(true);
    }

    // 用户管理
    public ArrayList<?> userManagement(int cho) {
        // manager 类的用户查询包括两个选择 学生（0）教师（1）
        if (Main.userFlag == 2) {
            switch (cho) {
                case 0:
                    return Main.userInfArray.studentArrayList;
                case 1:
                    return Main.userInfArray.teacherArrayList;
                default:
                    break;
            }
        }
        return null;
    }

    // 菜单选择
    public void menuChoose() {
        // 需要三个端的 menu 类
        switch (Main.userFlag) {
            case 0: // 学生
                StudentMenu studentMenu = new StudentMenu();
                studentMenu.setVisible(true);
                break;
            case 1: // 教师
                TeacherMenu teacherMenu = new TeacherMenu();
                teacherMenu.setVisible(true);
                break;
            case 2: // 管理员
                ManagerMenu managerMenu = new ManagerMenu();
                managerMenu.setVisible(true);
                break;
            default:
                break;
        }
    }
}
